/**
 * 提供Http请求方法的工具类
 */
class HttpRequestUtil {
    static #GET = 'GET';
    static #POST = 'POST';
    static get(url, contentType, defaultValue = null) {
        return HttpRequestUtil.httpRequest(HttpRequestUtil.#GET, url, contentType, null, defaultValue);
    }
    static post(url, contentType, body, defaultValue = null) {
        return HttpRequestUtil.httpRequest(HttpRequestUtil.#POST, url, contentType, body, defaultValue);
    }

    /**
     * 执行HTTP请求的核心方法
     * @param {string} method - 请求方法（GET/POST）
     * @param {string} url - 请求目标地址
     * @param {string} [contentType] - 请求内容类型（可选）
     * @param {*} [body=null] - 请求体数据（POST方法时有效）
     * @param {*} [defaultValue=null] - 请求失败时返回的默认值
     * @returns {Promise} 返回Promise对象：
     *                    - 成功时解析为响应数据
     *                    - 失败时返回默认值
     * @throws 当网络响应异常时会抛出错误
     */
    static httpRequest(method, url, contentType, body, defaultValue = null) {
        if (!url) { return defaultValue; }// 空地址立即返回默认值
        let payload = { method: method };
        if (contentType && contentType.length) {
            payload.headers = {};
            payload.headers['Content-Type'] = contentType;
        }
        if (method == HttpRequestUtil.#POST) {
            payload.body = body;
        }
        return fetch(url, payload).then(response => {
            if (!response.ok) { throw new Error(`网络请求失败，url： ${url}，状态码：${response.status}`); }
            return response.json();
        }).catch(error => {
            console.error('请求失败:', error);
            return defaultValue;
        });
    }
}

// 导出HttpRequestUtil类
module.exports = HttpRequestUtil;